package com.leecode.xiehf.page_16;

import com.leecode.Printer;

import java.util.Arrays;
/**
 *森林中，每个兔子都有颜色。其中一些兔子（可能是全部）告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。
 *
 * 返回森林中兔子的最少数量。
 *
 * 示例:
 * 输入: answers = [1, 1, 2]
 * 输出: 5
 * 解释:
 * 两只回答了 "1" 的兔子可能有相同的颜色，设为红色。
 * 之后回答了 "2" 的兔子不会是红色，否则他们的回答会相互矛盾。
 * 设回答了 "2" 的兔子为蓝色。
 * 此外，森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。
 * 因此森林中兔子的最少数量是 5: 3 只回答的和 2 只没有回答的。
 *
 * 输入: answers = [10, 10, 10]
 * 输出: 11
 *
 * 输入: answers = []
 * 输出: 0
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/rabbits-in-forest
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * https://leetcode-cn.com/problems/rabbits-in-forest/
 */
public class Solution_0781 extends Printer {

    public static void main(String[] args) {
        Solution_0781 solution = new Solution_0781();
        int i = solution.numRabbits(new int[]{0, 0 , 1 , 1, 1});
        print(i);
    }

    public int numRabbits(int[] answers) {
        if (answers.length == 0) {
            return 0;
        }

        Arrays.sort(answers);
        int sum = answers[0] + 1;
        int time = 0;
        for (int i = 1; i < answers.length; i++) {
            int answer = answers[i];
            if (answer != answers[i - 1]) {
                sum += (answers[i] + 1);
                time = 0;
            } else {
                time++;
                if (time > answer) {
                    sum += answer + 1;
                    time = 0;
                }
            }
        }
        return sum;
    }
}
